/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package client;

import javax.swing.JOptionPane;

import static client.RefManager.*;

public class ServerConnectionThread extends Thread {

    private String hostname;
    private String username;

    public ServerConnectionThread(String hostname, String username) {
        this.hostname = hostname;
        this.username = username;
    }

    private void showError(String message, String title) {
        gui.showError(message.replaceFirst("ERROR ", ""), title);
    }
    
    @Override//serverconnection, macht eine TCPVerbindung zum server auf
    public void run() {
        TCPClient tcpClient = new TCPClient();
        try {
            tcpClient.startJob(hostname);
        } catch (Exception e) {
            showError("Server ist Offline", "Server ist Offline");
            e.toString();
            return;
        }
        String response = tcpClient.writeToServer("NEW " + username);

        if (response.indexOf("ERROR") == -1) {// if +ok
            gui.loggedInVisibilityForFrames();
        } else {
            showError(response, "Anmeldung fehlgeschlagen");
            return;
        }
        NachrichtEmpfangenThread nET = new NachrichtEmpfangenThread();//thread zum empfangen der nachrichten von chatmitgliedern
        nET.start();
        while (!this.isInterrupted()) {
            try {
                String serverAnswer = tcpClient.writeToServer("INFO");
                if (serverAnswer.indexOf("ERROR") != -1) {// if +ok
                    showError(serverAnswer, "Server hat einen unerwarteten Fehler zurückgegeben");
                    gui.startConfig();
                    tcpClient.closeSocket();
                    return;
                } 
                //hier ist serverAnswer die Userliste
                String[] userList = serverAnswer.split(" ");
                if(userList.length >= 4 && userList.length % 2 == 0) {
                    client.userMap.clear();
                    for(int c = 2; c < userList.length ; c += 2){
                        client.userMap.put(userList[c], userList[c+1]);
                    }
                    gui.redrawUserList();
                } else {
                    showError("ERROR Server hat eine fehlerhafte Liste geliefert", "Fehler");
                    tcpClient.writeToServer("BYE");
                    tcpClient.closeSocket();
                    gui.startConfig();
                    return;
                }
                
                // alle 5 sec neue userliste
                this.sleep(5000);
            } catch (InterruptedException e) {
                tcpClient.writeToServer("BYE");
                tcpClient.closeSocket();
                return;
            }
        }

    }
    
        public String getUsername() {
        return username;
    }
}
